// api/file-upload.js
import request from "@/util/request";

/**
 * 上传文件到服务器
 * @param {File} file - 要上传的文件
 * @returns {Promise} 返回上传结果
 */
export function uploadFile(file) {
    const formData = new FormData();
    formData.append('file', file);

    return request.post('/backcode/file/upload', formData, {
        headers: {
            'Content-Type': 'multipart/form-data'
        },
        timeout: 30000 // 30秒超时
    });
}

/**
 * 批量上传文件
 * @param {File[]} files - 要上传的文件数组
 * @returns {Promise} 返回所有文件的上传结果
 */
export async function uploadMultipleFiles(files) {
    const uploadPromises = files.map(file => uploadFile(file));

    try {
        const results = await Promise.all(uploadPromises);
        return {
            success: true,
            data: results.map(result => result.data),
            message: '文件上传成功'
        };
    } catch (error) {
        console.error('批量上传失败:', error);
        throw new Error('部分文件上传失败，请重试');
    }
}

/**
 * 验证文件类型和大小
 * @param {File} file - 要验证的文件
 * @param {Object} options - 验证选项
 * @returns {Object} 验证结果
 */
export function validateFile(file, options = {}) {
    const {
        maxSize = 10 * 1024 * 1024, // 默认10MB
        allowedTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/webp'],
        minWidth = 512,
        minHeight = 512
    } = options;

    // 检查文件大小
    if (file.size > maxSize) {
        return {
            valid: false,
            error: `文件大小不能超过 ${Math.round(maxSize / 1024 / 1024)}MB`
        };
    }

    // 检查文件类型
    if (!allowedTypes.includes(file.type)) {
        return {
            valid: false,
            error: '不支持的文件格式，请上传 PNG/JPG/JPEG/WebP 格式的图片'
        };
    }

    return { valid: true };
}

/**
 * 获取图片尺寸
 * @param {File} file - 图片文件
 * @returns {Promise} 返回图片尺寸信息
 */
export function getImageDimensions(file) {
    return new Promise((resolve, reject) => {
        const img = new Image();
        const url = URL.createObjectURL(file);

        img.onload = () => {
            URL.revokeObjectURL(url);
            resolve({
                width: img.width,
                height: img.height,
                aspectRatio: img.width / img.height
            });
        };

        img.onerror = () => {
            URL.revokeObjectURL(url);
            reject(new Error('无法读取图片尺寸'));
        };

        img.src = url;
    });
}